package cn.heyige.backend.service;

import cn.heyige.backend.dto.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 统一用户服务 - 整合用户管理和认证功能
 * 
 * 专注于核心用户管理功能，提高系统性能和可维护性
 * 
 * @author CodeBuddy
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class UnifiedUserService {

    private final SimpleUserService simpleUserService;
    private final SimpleAuthService simpleAuthService;

    /**
     * 用户注册
     * 
     * @param registrationDTO 注册信息
     * @return 注册成功的用户DTO
     */
    public UserDTO register(UserRegistrationDTO registrationDTO) {
        return simpleUserService.register(registrationDTO);
    }

    /**
     * 用户登录
     * 
     * @param loginDTO 登录信息
     * @return 登录成功的用户DTO
     */
    public UserDTO login(UserLoginDTO loginDTO) {
        return simpleUserService.login(loginDTO);
    }

    /**
     * 更新用户心情状态
     * 
     * @param userId 用户ID
     * @param moodStatus 心情状态
     * @return 更新后的用户DTO
     */
    public UserDTO updateMoodStatus(Integer userId, String moodStatus) {
        return simpleUserService.updateMoodStatus(userId, moodStatus);
    }

    /**
     * 更新用户当前城市
     * 
     * @param userId 用户ID
     * @param currentCity 当前城市
     * @return 更新后的用户DTO
     */
    public UserDTO updateCurrentCity(Integer userId, String currentCity) {
        return simpleUserService.updateCurrentCity(userId, currentCity);
    }

    /**
     * 获取用户的占卜设置
     * 
     * @param userId 用户ID
     * @return 用户占卜设置DTO
     */
    public UserDivinationSettingsDTO getUserDivinationSettings(Integer userId) {
        return simpleUserService.getUserDivinationSettings(userId);
    }

    /**
     * 更新用户的占卜设置
     * 
     * @param userId 用户ID
     * @param settings 占卜设置
     * @return 更新后的用户占卜设置DTO
     */
    public UserDivinationSettingsDTO updateUserDivinationSettings(Integer userId, UserDivinationSettingsDTO settings) {
        return simpleUserService.updateUserDivinationSettings(userId, settings);
    }

    /**
     * 发送验证码
     * 
     * @param request 验证码请求
     * @return 验证码响应
     */
    public SendCodeResponse sendVerificationCode(SendCodeRequest request) {
        return simpleAuthService.sendVerificationCode(request);
    }

    /**
     * 用户注册（手机号）
     * 
     * @param request 注册请求
     * @return 认证响应
     */
    public UserAuthResponse registerWithPhone(UserRegistrationRequestV2 request) {
        return simpleAuthService.register(request);
    }

    /**
     * 用户登录（手机号）
     * 
     * @param request 登录请求
     * @return 认证响应
     */
    public UserAuthResponse loginWithPhone(UserLoginRequestV2 request) {
        return simpleAuthService.login(request);
    }

    /**
     * 刷新令牌
     * 
     * @param refreshToken 刷新令牌
     * @return 刷新令牌响应
     */
    public RefreshTokenResponse refreshToken(String refreshToken) {
        return simpleAuthService.refreshToken(refreshToken);
    }

    /**
     * 用户登出
     * 
     * @param accessToken 访问令牌
     * @param allDevices 是否登出所有设备
     */
    public void logout(String accessToken, Boolean allDevices) {
        simpleAuthService.logout(accessToken, allDevices);
    }

    /**
     * 验证访问令牌
     * 
     * @param token 访问令牌
     * @return 是否有效
     */
    public boolean validateAccessToken(String token) {
        return simpleAuthService.validateAccessToken(token);
    }

    /**
     * 从令牌中获取用户ID
     * 
     * @param token 访问令牌
     * @return 用户ID
     */
    public Integer getUserIdFromToken(String token) {
        return simpleAuthService.getUserIdFromToken(token);
    }
}